package br.com.ss.seguranca.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.ss.seguranca.model.dao.PerfilDAO;
import br.com.ss.seguranca.model.dao.PerfilRotinaDAO;
import br.com.ss.seguranca.model.dao.SistemaDAO;
import br.com.ss.seguranca.model.entity.Perfil;
import br.com.ss.seguranca.model.entity.PerfilRotina;
import br.com.ss.seguranca.model.entity.Sistema;

@Component("perfilRotinaHome")
@ManagedBean(name = "perfilRotinaHome")
public class PerfilRotinaHome {

	private static final Logger logger = LoggerFactory
			.getLogger(PerfilRotinaHome.class);

	private Perfil perfil = new Perfil();
	private Perfil selected = new Perfil();
	private List<Perfil> perfils;
	private Sistema sistema;
	private List<Sistema> sistemas;

	private List<PerfilRotina> perfilRotinas;

	@Autowired
	private PerfilDAO perfilDao;

	@Autowired
	private PerfilRotinaDAO perfilRotinaDAO;

	@Autowired
	private SistemaDAO sistemaDAO;

	@PostConstruct
	public void init() {
		this.sistemas = sistemaDAO.findAll();
		this.sistema = new Sistema();
	}

	public String getMessage() {
		logger.debug("Returning message from perfil home bean");
		return "Hello from Spring";
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void save() {
		this.perfil.setSistema(this.sistema);

		if (this.perfil.getId() == 0)
			perfilDao.save(this.perfil);
		else
			perfilDao.merge(this.perfil);
		this.perfil = new Perfil();
		invalidatePerfils();
		getPerfils();
	}

	public void remove() {
		System.out.println(perfil.toString());
		perfilDao.remove(this.selected);
		perfil = new Perfil();
		invalidatePerfils();
		getPerfils();
	}

	public String edit() {
		System.out.println(perfil.toString());
		perfil = this.selected;
		this.selected = new Perfil();
		return "edit";
	}

	public String clean() {
		this.perfil = new Perfil();
		return "edit";
	}

	private void invalidatePerfils() {
		perfils = null;
	}

	public List<Perfil> getPerfils() {
		if (perfils == null) {
			perfils = perfilDao.list();
		}
		return perfils;

	}

	public Perfil getSelected() {
		return selected;
	}

	public void setSelected(Perfil selected) {
		this.selected = selected;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public void setPerfils(List<Perfil> perfils) {
		this.perfils = perfils;
	}

	public List<Sistema> getSistemas() {
		if (this.sistemas == null)
			this.sistemas = sistemaDAO.findAll();
		return sistemas;
	}

	public Sistema getSistema() {
		return sistema;
	}

	public void setSistema(Sistema sistema) {
		this.sistema = sistema;
	}

	public void setSistemas(List<Sistema> sistemas) {
		this.sistemas = sistemas;
	}

	public List<PerfilRotina> getListPerfilRotinasPorSistema(Perfil perfil) {
		return perfilRotinaDAO.listPorPerfil(perfil);
	}

	public void setPerfilRotinas(List<PerfilRotina> perfilRotinas) {
		this.perfilRotinas = perfilRotinas;
	}
}
